home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Tools / Turbo Pascal V7 / INTRFACE.ZIP / MENUS.INT < prev    next >
Text File  |  1992-11-03  |  6KB  |  237 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Turbo Pascal Version 7.0                        }
  5. {       Turbo Vision Unit                               }
  6. {                                                       }
  7. {       Copyright (c) 1991,92 Borland International     }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit Menus;
  12.  
  13. {$O+,F+,X+,I-,S-}
  14.  
  15. interface
  16.  
  17. uses Objects, Drivers, Views;
  18.  
  19. const
  20.  
  21. { Color palettes }
  22.  
  23.   CMenuView   = #2#3#4#5#6#7;
  24.   CStatusLine = #2#3#4#5#6#7;
  25.  
  26. type
  27.  
  28. { TMenu types }
  29.  
  30.   TMenuStr = string[31];
  31.  
  32.   PMenu = ^TMenu;
  33.  
  34.   PMenuItem = ^TMenuItem;
  35.   TMenuItem = record
  36.     Next: PMenuItem;
  37.     Name: PString;
  38.     Command: Word;
  39.     Disabled: Boolean;
  40.     KeyCode: Word;
  41.     HelpCtx: Word;
  42.     case Integer of
  43.       0: (Param: PString);
  44.       1: (SubMenu: PMenu);
  45.   end;
  46.  
  47.   TMenu = record
  48.     Items: PMenuItem;
  49.     Default: PMenuItem;
  50.   end;
  51.  
  52. { TMenuView object }
  53.  
  54.   { Palette layout }
  55.   { 1 = Normal text }
  56.   { 2 = Disabled text }
  57.   { 3 = Shortcut text }
  58.   { 4 = Normal selection }
  59.   { 5 = Disabled selection }
  60.   { 6 = Shortcut selection }
  61.  
  62.   PMenuView = ^TMenuView;
  63.   TMenuView = object(TView)
  64.     ParentMenu: PMenuView;
  65.     Menu: PMenu;
  66.     Current: PMenuItem;
  67.     constructor Init(var Bounds: TRect);
  68.     constructor Load(var S: TStream);
  69.     function Execute: Word; virtual;
  70.     function FindItem(Ch: Char): PMenuItem;
  71.     procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual;
  72.     function GetHelpCtx: Word; virtual;
  73.     function GetPalette: PPalette; virtual;
  74.     procedure HandleEvent(var Event: TEvent); virtual;
  75.     function HotKey(KeyCode: Word): PMenuItem;
  76.     function NewSubView(var Bounds: TRect; AMenu: PMenu;
  77.       AParentMenu: PMenuView): PMenuView; virtual;
  78.     procedure Store(var S: TStream);
  79.   end;
  80.  
  81. { TMenuBar object }
  82.  
  83.   { Palette layout }
  84.   { 1 = Normal text }
  85.   { 2 = Disabled text }
  86.   { 3 = Shortcut text }
  87.   { 4 = Normal selection }
  88.   { 5 = Disabled selection }
  89.   { 6 = Shortcut selection }
  90.  
  91.   PMenuBar = ^TMenuBar;
  92.   TMenuBar = object(TMenuView)
  93.     constructor Init(var Bounds: TRect; AMenu: PMenu);
  94.     destructor Done; virtual;
  95.     procedure Draw; virtual;
  96.     procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual;
  97.   end;
  98.  
  99. { TMenuBox object }
  100.  
  101.   { Palette layout }
  102.   { 1 = Normal text }
  103.   { 2 = Disabled text }
  104.   { 3 = Shortcut text }
  105.   { 4 = Normal selection }
  106.   { 5 = Disabled selection }
  107.   { 6 = Shortcut selection }
  108.  
  109.   PMenuBox = ^TMenuBox;
  110.   TMenuBox = object(TMenuView)
  111.     constructor Init(var Bounds: TRect; AMenu: PMenu;
  112.       AParentMenu: PMenuView);
  113.     procedure Draw; virtual;
  114.     procedure GetItemRect(Item: PMenuItem; var R: TRect); virtual;
  115.   end;
  116.  
  117. { TMenuPopup object }
  118.  
  119.   { Palette layout }
  120.   { 1 = Normal text }
  121.   { 2 = Disabled text }
  122.   { 3 = Shortcut text }
  123.   { 4 = Normal selection }
  124.   { 5 = Disabled selection }
  125.   { 6 = Shortcut selection }
  126.  
  127.   PMenuPopup = ^TMenuPopup;
  128.   TMenuPopup = object(TMenuBox)
  129.     constructor Init(var Bounds: TRect; AMenu: PMenu);
  130.     procedure HandleEvent(var Event: TEvent); virtual;
  131.   end;
  132.  
  133. { TStatusItem }
  134.  
  135.   PStatusItem = ^TStatusItem;
  136.   TStatusItem = record
  137.     Next: PStatusItem;
  138.     Text: PString;
  139.     KeyCode: Word;
  140.     Command: Word;
  141.   end;
  142.  
  143. { TStatusDef }
  144.  
  145.   PStatusDef = ^TStatusDef;
  146.   TStatusDef = record
  147.     Next: PStatusDef;
  148.     Min, Max: Word;
  149.     Items: PStatusItem;
  150.   end;
  151.  
  152. { TStatusLine }
  153.  
  154.   { Palette layout }
  155.   { 1 = Normal text }
  156.   { 2 = Disabled text }
  157.   { 3 = Shortcut text }
  158.   { 4 = Normal selection }
  159.   { 5 = Disabled selection }
  160.   { 6 = Shortcut selection }
  161.  
  162.   PStatusLine = ^TStatusLine;
  163.   TStatusLine = object(TView)
  164.     Items: PStatusItem;
  165.     Defs: PStatusDef;
  166.     constructor Init(var Bounds: TRect; ADefs: PStatusDef);
  167.     constructor Load(var S: TStream);
  168.     destructor Done; virtual;
  169.     procedure Draw; virtual;
  170.     function GetPalette: PPalette; virtual;
  171.     procedure HandleEvent(var Event: TEvent); virtual;
  172.     function Hint(AHelpCtx: Word): String; virtual;
  173.     procedure Store(var S: TStream);
  174.     procedure Update; virtual;
  175.   end;
  176.  
  177. { TMenuItem routines }
  178.  
  179. function NewItem(Name, Param: TMenuStr; KeyCode: Word; Command: Word;
  180.   AHelpCtx: Word; Next: PMenuItem): PMenuItem;
  181. function NewLine(Next: PMenuItem): PMenuItem;
  182. function NewSubMenu(Name: TMenuStr; AHelpCtx: Word; SubMenu: PMenu;
  183.   Next: PMenuItem): PMenuItem;
  184.  
  185. { TMenu routines }
  186.  
  187. function NewMenu(Items: PMenuItem): PMenu;
  188. procedure DisposeMenu(Menu: PMenu);
  189.  
  190. { TStatusLine routines }
  191.  
  192. function NewStatusDef(AMin, AMax: Word; AItems: PStatusItem;
  193.   ANext: PStatusDef): PStatusDef;
  194. function NewStatusKey(const AText: String; AKeyCode: Word; ACommand: Word;
  195.   ANext: PStatusItem): PStatusItem;
  196.  
  197. { Menus registration procedure }
  198.  
  199. procedure RegisterMenus;
  200.  
  201. { Stream registration records }
  202.  
  203. const
  204.   RMenuBar: TStreamRec = (
  205.      ObjType: 40;
  206.      VmtLink: Ofs(TypeOf(TMenuBar)^);
  207.      Load:    @TMenuBar.Load;
  208.      Store:   @TMenuBar.Store
  209.   );
  210.  
  211. const
  212.   RMenuBox: TStreamRec = (
  213.      ObjType: 41;
  214.      VmtLink: Ofs(TypeOf(TMenuBox)^);
  215.      Load:    @TMenuBox.Load;
  216.      Store:   @TMenuBox.Store
  217.   );
  218.  
  219. const
  220.   RStatusLine: TStreamRec = (
  221.      ObjType: 42;
  222.      VmtLink: Ofs(TypeOf(TStatusLine)^);
  223.      Load:    @TStatusLine.Load;
  224.      Store:   @TStatusLine.Store
  225.   );
  226.  
  227. const
  228.   RMenuPopup: TStreamRec = (
  229.      ObjType: 43;
  230.      VmtLink: Ofs(TypeOf(TMenuPopup)^);
  231.      Load:    @TMenuPopup.Load;
  232.      Store:   @TMenuPopup.Store
  233.   );
  234.  
  235.  
  236.  
  237.